package com.tcm.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.tcm.entity.ItemStudent;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tcm.entity.bo.UserCacheBo;
import com.tcm.entity.resp.PageR;
import com.tcm.entity.vo.*;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
* @author Guqier
* @description 针对表【ts_item_student(按章节练习学生答题记录)】的数据库操作Service
* @createDate 2023-08-20 16:56:55
*/
public interface ItemStudentService extends IService<ItemStudent> {

    /**
     * 保存学生题目练习记录
     * @param resp       题目评判结果
     * @param currUserId 当前 登录用户ID
     * @return 处理结果
     * @throws JsonProcessingException JSON序列化异常
     */
    @Transactional
    boolean saveItemStudent(ItemCorrectResp resp, Long currUserId, Integer type) throws JsonProcessingException;

    /**
     * 保存学生题目练习记录
     * @param resp        题目评判结果
     * @param userCacheBo 用户信息
     * @return 处理结果
     * @throws JsonProcessingException JSON序列化异常
     */
    @Transactional
    boolean saveItemStudent(ItemCorrectResp resp, UserCacheBo userCacheBo, Integer type) throws JsonProcessingException;

    /**
     * 获取按章节练习练习记录
     * @param currUserId 当前登录用户ID
     * @return 练习记录
     */
    List<ItemStudentHistoryResp> getChapterExerciseHistory(Long currUserId);

    /**
     * 获取错题列表
     * @param account 当前用户账号
     * @return 错图列表
     */
    List<WrongItemListResp> getWrongItemList(String account);

    /**
     * 获取错题详细
     * @param current 当前数
     * @param account 当前用户账号
     * @return 错题详细
     */
    PageR<WrongItemDetailResp> getWrongItemDetail(Integer current, String account);

    /**
     * 教师获取学生学习记录
     * @param page 当前页号
     * @param pageSize 页面大小
     * @param account 检索学生账号
     * @param currUserId 当前用户ID
     * @param currAccount 当前用户账号
     * @return 学习记录列表
     */
    PageR<ItemStudentHistoryResult> getStudentHistoryByTeacher(Integer page, Integer pageSize, String account, Long currUserId, String currAccount);
}
